/**
 * Classe permettant la configuration de l'application depuis le fichier "ElevatorManager.conf"
 * @authors: Bertrand GUILLAUMOND
 * @version 1.0
 */

import java.util.*;
import java.io.*;

public class Config{

	private boolean day;		 // Mode jour / nuit
	private boolean week;		 // Mode semaine / we
	private int energyMode;		 // Mode économie d'énergie / distance /les deux
	private int returnMode; // repositionnement optimise des ascenceurs
	private int refreshDelay;
	ConsoleFrame console;
	
	public Config(ConsoleFrame c)
	{
		day = false;
		week = false;
		energyMode = 0;
		returnMode = 0;
		refreshDelay = 0;
		console = c;
	}

	public int getRefreshDelay()
	{
		return refreshDelay;
	}

	public void setRefreshDelay(int delay)
	{
		refreshDelay = delay;
	}
	
	public boolean isDay()
	{
		return day;	
	}

	public boolean isWeek()
	{
		return week;	
	}

	public int getEnergyMode()
	{
		return energyMode;	
	}

	public int getReturnMode()
	{
		return returnMode;	
	}

	public void setDay(boolean b )
	{
		day = b;	
	}

	public void setWeek(boolean b )
	{
		week = b;	
	}

	public void setEnergyMode(int m )
	{
		energyMode = m;	
	}

	public void setReturnMode(int m )
	{
		returnMode = m;	
	}
	
	public void read()
	{
		String chaine="";
		String fichier ="ElevatorManager.conf";
		String arrayConf[] = new String[2];
		//lecture du fichier texte	
		try{
			InputStream ips= new FileInputStream(fichier); 
			InputStreamReader ipsr=new InputStreamReader(ips);
			BufferedReader br=new BufferedReader(ipsr);
			String ligne;

			while ((ligne=br.readLine())!=null){
				if(ligne.length() == 0 || ligne.charAt(0) ==  ' ' || ligne.charAt(0) == '#')
					continue;
				try{
					ligne = ligne.trim();
					arrayConf=ligne.split(":");
					if(arrayConf[0].equals("day"))
						day = Config.getBoolFromString(arrayConf[1]);
					if(arrayConf[0].equals("week"))
						week = Config.getBoolFromString(arrayConf[1]);
					if(arrayConf[0].equals("energyMode"))
						energyMode = Integer.parseInt(arrayConf[1]);
					if(arrayConf[0].equals("returnMode"))
						returnMode = Integer.parseInt(arrayConf[1]);
					if(arrayConf[0].equals("refreshDelay"))
						refreshDelay = Integer.parseInt(arrayConf[1]);
				}
				catch(Exception e)
				{
					System.out.println(e.toString());
					System.out.println("ERREUR : affectation des paramètres impossible, vérifier la configuration");
					System.exit(0);
				}
			}
			br.close(); 

			this.checkConf();
		}		
		catch (Exception e)
		{
			System.out.println(e.toString());
		}
	}

	public void checkConf()
	{
		if(refreshDelay <= 10 || refreshDelay >= 10000)
		{
			System.out.println("ERREUR : les paramètres de configuration n'ont pas tous été correctement affectés dans le fichier de configuration");			
			System.exit(0);
		}
		console.append("Journée  : "+Config.getStringFromBool(day));
		console.append("Semaine  : "+Config.getStringFromBool(week));
		console.append("Mode de sélection : "+energyMode);
		console.append("Mode de repositionnement : "+ returnMode);
		console.append("Durée de rafraichissement : "+refreshDelay+"ms soit "+Math.round(5000/refreshDelay)+" fois la vitesse normale");
		
	}

	public static boolean getBoolFromString(String str)
	{
		if(str.equals("true"))
			return true;
	
		return false;
	}

	public static String getStringFromBool(boolean b)
	{
		if(b)
			return "true";
	
		return "false";
	}
}
